package com.jgzx.constant;

import cn.hutool.core.util.StrUtil;

/**
 * 单据类别【销售单、出库单、采购单、入库单。。。】
 * @author libo
 * @date 2021-03-19
 */
public enum BillCategoryEnum {

    /** BOM【BOM1】 */
    BOM_BILL("BOM1", "BOM单"),
    /** 备料清单【BOMP】 */
    BOM_PREPARATION_BILL("BOMP", "备料清单"),
    /** 销售单【XS01】 */
    SALE_BILL("XS01", "销售订单"),
    /** 应收单【YS01】 */
    RECEIVABLE_BILL("YS01", "应收单"),
    /** 收款单【SK01】 */
    RECEIVE_PAYMENT_BILL("SK01", "收款单"),
    /** 对账单【DZ01】 */
    STATEMENT_BILL("DZ01", "对账单"),
    /** 采购单【CG01】 */
    PURCHASE_BILL("CG01", "采购订单"),
    /** 应付单【YF01】 */
    PAYABLE_BILL("YF01", "应付单"),
    /** 付款单【FK01】 */
    PAYMENT_BILL("FK01", "付款单"),
    /** 生产排产【SCPC】 */
    PRODUCTION_SCHEDULE_BILL("SCPC","生产排产"),
    /** 工序报工【GXBG】 */
    PROCESS_OL_BILL("GXBG","工序报工"),
    /** 入库单【IN0I】 */
    IN_STOCK_BILL("IN0I","入库单"),
    /** 出库单【OUTI】 */
    OUT_STOCK_BILL("OUTI","出库单"),
    /** 库存单【INVB】 */
    INVENTORY_BILL("INVB","库存单"),
    /** 库存冻结单【INVF】 */
    INVENTORY_FREEZE_BILL("INVF", "库存冻结单"),
    /** 库存流水单【INVS】 */
    INVENTORY_STREAM_BILL("INVS", "库存流水单"),
    /** 调拨单【DB01】 */
    TRANSFER_BILL("DB01", "调拨单"),
    /** 组装单【ZZ01】 */
    ASSEMBLE_BILL("ZZ01", "组装单"),
    /** 拆分单【CF01】 */
    SPLIT_BILL("CF01", "拆分单"),
    /** 盘点单【PD01】 */
    STOCKTAKING_BILL("PD01", "盘点单"),
    /** 工作中心 */
    WORK_CENTER_BILL("GZZX", "工作中心");

    private final String value;
    private final String showName;

    /**
     * @param value 值
     * @param showName 显示名称
     */
    BillCategoryEnum(String value, String showName){
        this.value = value;
        this.showName = showName;
    }

    /**
     * 通过单据类别值获取枚举对象
     * @param value 单据类别值
     * @return 单据类别枚举
     */
    public static BillCategoryEnum getBillCategoryByValue(String value){
        for(BillCategoryEnum billCategory : BillCategoryEnum.values()){
            if(StrUtil.equals(value, billCategory.value())){
                return billCategory;
            }
        }
        return null;
    }

    public String value() {
        return this.value;
    }

    public String showName() {
        return this.showName;
    }

}
